package good

import (
	"enjoy_wangyashuo/formdata"
	"enjoy_wangyashuo/internal/model/mysql"
	"errors"
	"fmt"
	"gorm.io/gorm"
)

// 商品属性sku表
type GoodSku struct {
	gorm.Model
	Img         string `gorm:"type:json;comment:商品图片链接;"`
	ProValueID1 int64  `gorm:"type:int;comment:属性值1的ID;"`
	ProValueID2 int64  `gorm:"type:int;comment:属性值2的ID;"`
	ProValueID3 int64  `gorm:"type:int;comment:属性值3的ID;"`
	Price       string `gorm:"type:decimal(10,2);comment:商品价格;"`
	VipPrice    string `gorm:"type:decimal(10,2);comment:VIP价格;"`
	Stock       int64  `gorm:"type:int;comment:商品库存;"`
	GoodsID     int64  `gorm:"type:int;comment:关联的商品ID;"`
}

// 修改库存
func (g *GoodSku) UpdateStockByGoodsId(num int) error {
	return mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(g).Where("id = ?", g.ID).Update("stock", gorm.Expr("stock - ?", num)).Error
	})
}

// 查询详情
func (g *GoodSku) GetGoodsSkuInfoBySkuID(ids []int64) ([]GoodSku, error) {
	var list []GoodSku
	return list, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Where("id in (?)", ids).Find(&list).Error
	})
}

// 根据属性值查询商品的详情信息
func (g *GoodSku) GetGoodsDetailByVal(image []string) (info formdata.GoodsSkuInfo, err error) {
	return info, mysql.WithMysql(func(db *gorm.DB) error {
		// 初始化查询条件
		query := db.Where("goods_id = ?", g.GoodsID).
			Where("pro_value_id3 = ?", g.ProValueID3)

		// 根据属性ID添加查询条件
		if g.ProValueID1 != 0 {
			fmt.Println("添加参数1")
			query = query.Where("pro_value_id1 = ?", g.ProValueID1)
		}
		if g.ProValueID2 != 0 {
			fmt.Println("添加参数2")
			query = query.Where("pro_value_id2 = ?", g.ProValueID2)
		}
		//如果有参数查询查询带参数的，如果没有查询默认的
		if g.ProValueID3 != 0 {
			fmt.Println("添加参数3")
			query = query.Where("pro_value_id3 = ?", g.ProValueID3)
		}
		// 如果没有指定任何属性值，则按价格排序取最低价格商品
		if g.ProValueID1 == 0 && g.ProValueID2 == 0 && g.ProValueID3 == 0 {
			fmt.Println("默认查询")
			query = query.Order("price")
		}
		// 执行查询
		err = query.First(&g).Error
		if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
			return err
		}
		info = formdata.GoodsSkuInfo{
			SkuID:       int64(g.ID),
			ProValueID1: g.ProValueID1,
			ProValueID2: g.ProValueID2,
			ProValueID3: g.ProValueID3,
			Price:       g.Price,
			VipPrice:    g.VipPrice,
			Stock:       g.Stock,
			GoodsID:     g.GoodsID,
			Image:       image,
		}
		return nil
	})
}
